package org.example.ba04;

import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

/*
* @Aspect:是aspectj框架中的注解
* 作用：表示当前类是切面类。
* 切面类：是用来给业务类增加功能的，在这个类中有切面类的功能实现
* 位置：在类定义的上面
*
* */
@Aspect
@Component
public class MyAspect {
    /*异常通知
    * 1.public
    * 2.没有返回值
    * 3.方法名称自定义
    * 4.方法可以有一个Exception，如果还有有就是JoinPotint
    * */


    /**
     * 属性：1.value切入点表达式
     *      2.throwing自定义的变量抛出的异常对象
     *          变量名必须和方法的参数名一样
     * 特点：
     *      1.在目标方法抛出异常时
     *      2.可以做异常的监控程序，监控目标方法执行时是不是有异常，如果有异常
     *      可以发送邮件，短信进行通知
     *
     * 执行就是：
     * try{
     *     SomeServiceImpl.doSecond(..)
     * }catch(Exception e){
     *     myAfterThrowing(e)
     * }
     */
    @AfterThrowing(value="execution(* *..SomeSerciceImpl.dosecond(..))",
        throwing = "ex")
    public void myAfterThrowing(Exception ex){
        System.out.println("异常通知：方法发生异常时，执行："+ex.getMessage());
    }



}
